Cyclic Noise
https://gyazo.com/7c9842e71710d4631794723ab42d282d
GLSL
作り方の一例。0b5vrがライブコーディングでよく使う様式 原文ではノイズの生成を dot で行っているが、こちらは cross を用いて出力を3次元にしている
pump は通常 2.0 を入れる 他の値を入れても面白い
code:glsl
vec3 cyclicNoise( vec3 p, float pump ) {
vec4 sum = vec4( 0.0 );
mat3 basis = getOrthogonalBasis( vec3( -1.0, 2.0, -3.0 ) );
for ( int i = 0; i < 5; i ++ ) {
p *= basis;
p += sin( p.yzx );
sum += vec4(
cross( cos( p ), sin( p.zxy ) ),
1.0
);
sum *= pump;
p *= 2.0;
}
return sum.xyz / sum.w;
}
https://gyazo.com/9b3af14e151a8c0fb86e71ff777bd000
Leon Denise版
座標ドメインに対するディスプレイスのやり方がやや異なり、sin(p.yzx) ではなく生成途中のノイズ自体を足し算している
code:glsl
// gyroid pattern
float gyroid (vec3 p)
{
return dot(sin(p),cos(p.yzx));
}
// noise
float fbm (vec2 p)
{
vec3 q = vec3(p, 0);
float result = 0., a = .5;
for (float i = 0.; i < 4.; ++i, a /= 2.)
{
q += (result-.5);
result += gyroid(q/a)*a;
}
return result;
}